import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserModule } from './modules/user/user.module';
import { ApplicationModule } from './modules/application/application.module';
import { UploadModule } from './modules/upload/upload.module';
import { JwtModule } from '@nestjs/jwt';
import { JwtStrategy } from './common/strategies/jwt.strategy';

@Module({
  imports: [
    // 配置上传模块
    UploadModule,
    // 配置用户模块
    UserModule,
    // 配置应用模块
    ApplicationModule,
    // 配置环境变量模块
    ConfigModule.forRoot({
      envFilePath: '.development.env',
      isGlobal: true,
    }),
    // // 全局数据库配置
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: process.env.DB_HOST,
      port: Number(process.env.DB_PORT),
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_DATABASE,
      autoLoadEntities: true, // 通过 forFeature() 方法注册的每个实体都将自动添加到配置对象的 entities 数组中
      // entities: [User], // 实体类数组，指定要映射的数据库表(全局注册User实体)
      synchronize: true, // 自动同步实体类与数据库表结构(开发环境下使用，生产环境下不建议使用)
    }),
    // 配置JWT模块
    JwtModule.register({
      global: true,
      secret: process.env.JWT_SECRET,
      signOptions: { expiresIn: '8h' },
    }),
  ],
  providers: [JwtStrategy],
  exports: [JwtModule],
})
export class AppModule {}
